import axios from "axios";
import router from '@/router';
import { setToken, getToken, removeToken } from '@/utils/token';



// 教师模块

axios.defaults.baseURL="http://116.62.176.109";  //另一种写法
// axios.defaults.baseURL="http://47.109.30.198:8081/";  //另一种写法
axios.defaults.timeout=50000;


// axios.defaults.headers.post['Content-Type'] = 'application/json';

// 获取refreshToken
let refreshToken:any = getToken('refreshToken') || "";
// 判断是否开启刷新token：不刷新
let isrefreshToken = false;
// 如果没有refreshToken（没登录||过期了），就开启刷新token
if (!getToken("refreshToken")) {
	isrefreshToken = false;
	if (!getToken('refreshToken')) {
		isrefreshToken = true;
	}
}

// 添加请求拦截器
axios.interceptors.request.use((config) => {
	// 获取token
	let token = getToken('token');
	// 如果有token
	if (token) {
		// 并且token没过期
		if (!isrefreshToken) {
			config.headers['Token'] = getToken('token') || '';
		}
	}
	//没有token
	if(token==undefined){
		router.push("/");
	}

	// 如果有refreshToken
	if (refreshToken) {
		// 且需要刷新token
		if (isrefreshToken) {
			config.headers['Token'] = getToken('refreshToken');
		}
	}
	return config;
}),
	(error:any) => {
		return Promise.reject(error);
	};

// 添加响应拦截器
axios.interceptors.response.use((response) => {
	// 对响应数据做些什么
	// console.log('响应状态码', response.data.code);

	let code = response.data.code;

	// 还没有设置refreshToken请求头，需要设置一下再次发送请求
	if (!refreshToken && getToken('refreshToken') != null) {
		refreshToken = getToken('refreshToken');
		return axios(response.config);
	}

	if (code == 401 || code == 1021) {
		//token过期了，需要带着refreshToken，去换取新的token
		refreshToken = getToken('refreshToken');
		isrefreshToken = true;
		// 相当于重新走一遍刚刚的请求
		return axios(response.config);
	}

	if (code == 1024) {
		setToken('token', response.data.data);
		isrefreshToken = false;
		return axios(response.config);
	} else if (code == 1023) {

		// 将本地token删除
		removeToken('refreshToken');
		removeToken('token');
		// 跳转到登录页面，重新登录
		router.push('/login');
		//返回信息，让用户重新登录
		isrefreshToken = true;
		alert('登录已超期,请重新登录');
	}

	return response;
}),
	(error:any) => {
		return Promise.reject(error);
	};


export default axios;